package com.damon.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;

public class LogbackLoadUtil {
	/**
	 * 默认加载项目内配置文件，如果外部文件存在，则加载外部文件。
	 * 使用io作为参数来加载配置文件，因为加载resource目录下文件的方式，通过io流加载最稳定。
	 */
	public static String loadExportXml() {
		String propName = "logback.xml";
		InputStream logbackIO = null;//配置文件io流
		String logbackFilePath =null;//配置文件路径
		
		try {
			//默认的内部日志配置文件
			//路径前必须要加上/,不然打包之后会查不到路径
			logbackIO = LogbackLoadUtil.class.getResourceAsStream("/logback/" + propName);	
			logbackFilePath = "项目内路径-"+LogbackLoadUtil.class.getResource("/logback/"+propName).getPath();

			//外部日志配置文件，文件存在则从外部加载
			File externalFile = new File("config/" + propName);
			if(externalFile.exists()) {
				logbackIO = new FileInputStream(externalFile);
				logbackFilePath = externalFile.getAbsolutePath();
//				logbackFile = externalFile;
			}
			
			//加载配置文件
			if (logbackIO != null) {
//			if (logbackFile.exists()) {
				LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
				JoranConfigurator configurator = new JoranConfigurator();
				configurator.setContext(lc);
				lc.reset();
				try {
					configurator.doConfigure(logbackIO);
				} catch (JoranException e) {
					System.out.println("加载日志配置文件出错！！");
					e.printStackTrace(System.err);
					// System.exit(-1);
				}
			}else {
				return "无可加载文件！！";
			}
		} catch (Exception e) {
			System.out.println("加载日志配置文件！！");
		}finally {
			if(logbackIO !=null) {
				try {
					logbackIO.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

		return logbackFilePath;
	}
}
